Skip to content

fix(server): wire Memory.node into the delivered httpapi app graph - #313

Merged
LeXwDeX merged 3 commits into
devfrom
fix/memory-service-unreachable
Aug 17, 2026
Merged

fix(server): wire Memory.node into the delivered httpapi app graph#313
LeXwDeX merged 3 commits into
devfrom
fix/memory-service-unreachable

Conversation

@LeXwDeX

@LeXwDeX LeXwDeX commented Aug 17, 2026

Copy link
Copy Markdown
Owner

Closes #311

根因(debug-repair-full 四泳道仲裁实证,指纹 sha256:37c7ee25…)

五处 Effect.serviceOption(Memory.Service) 守卫(/memory 拦截器、memory_search 工具、system prompt、compaction、bootstrap)全部静默解析为 None。Memory.node 出现在每个消费方的依赖数组里——看起来接着线——但 LayerNode 构建只把依赖喂给节点自身实现体、不做再导出;真实交付给会话的环境上下文是 server.ts 唯一 buildLayer(app) 调用点的 app 组直接成员 mergeAll,该组缺 Memory.node。这与本文件 SettingsHook/HookRewakeLive 注释记载的已知失效类同源,serviceOption 使缺线静默 no-op。

修复(最小因果改动)

验证(全部会话内复跑)

门禁 结果
新回归测试 2 pass / 0 fail
memory 全套(test/memory + memory-search) 89 pass / 0 fail
session-prompt 套件 76 pass / 0 fail(既有 skip 1)
bun typecheck EXIT=0

范围守卫:零 core 改动、零守卫串改动、零激活模型改动 → 无需 SDK 再生。AGENTS.md 为随附文档提交(已过 review 验证 docs-only)。

交付链说明

export const app 是故意暴露的装配缝:回归锁定的是 server.ts:323 交付的环境图本身,任何未来改动若使 Memory 离开交付图将立即以真实症状失败。

feat(core): release v1.0.23 — built-in /dag-init and /dag-auto ultra-flow commands
…ssue #311)

Memory.node appeared in every consumer's dependency array, but LayerNode
builds feed dependencies only to a node's own implementation body without
re-export — the ambient context delivered to live sessions is the mergeAll
of the app group's direct members at server.ts buildLayer call site, which
lacked Memory.node. All five serviceOption(Memory.Service) guards therefore
silently resolved None: /memory answered 'remains off' and memory_search
'Unabailable' despite a valid identity and init stamp.

Add Memory.node to the app group and export the app graph so the new
regression test builds the exact production delivery graph: one probe
asserts Memory.Service is reachable inside it, one drives the real /memory
command end-to-end. Reverting the wiring turns the test 0/2 with the
literal symptom.
Drop the retired V2 session vocabulary, point extenders at src/memory and
src/config references, and record the /dag-* command family, template
precedence, the /init memory-activation gate, and the release-notes
template requirement.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant